package br.org.acessobrasil.portal.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.goals.tableedit.util.Conversor;
import br.org.acessobrasil.portal.Gerenciador;
import br.org.acessobrasil.portal.facade.ItemConteudoFacade;
import br.org.acessobrasil.portal.facade.TipoConteudoFacade;
import br.org.acessobrasil.portal.modelo.Conteudo;
import br.org.acessobrasil.portal.modelo.ConteudoFormatado;
import br.org.acessobrasil.portal.modelo.ItemConteudo;
import br.org.acessobrasil.portal.modelo.Pagina;

public class Rss extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private static ItemConteudoFacade itemConteudoFacade;
	private TipoConteudoFacade tipoConteudoFacade;
	
	public ItemConteudoFacade getItemConteudoFacade() {
		return itemConteudoFacade;
	}
	public TipoConteudoFacade getTipoConteudoFacade(){
		return tipoConteudoFacade;
	}
	
	public void setItemConteudoFacade(ItemConteudoFacade itemConteudoFacade) {
		Rss.itemConteudoFacade = itemConteudoFacade;
	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Long nu_conteudo = 1000l;//default
		try {
			response.setContentType("application/rss+xml");
			if(request.getParameter("conteudo")!=null){
				nu_conteudo = Long.parseLong(request.getParameter("conteudo"));
			}
			String retorno = "";
			Conteudo conteudo = itemConteudoFacade.buscarConteudo(nu_conteudo);
			List<ItemConteudo> lista =  itemConteudoFacade.listarItemConteudo(conteudo, 0,20,false);
			//TODO montar o link completo
			String porta = "";
			if(request.getServerPort()!=80){//diferente da porta padrao
				porta = ":" + request.getServerPort();//coloca o numero da porta
			}
			StringBuilder sb = new StringBuilder();
			sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
			//sb.append("<?xml-stylesheet title=\"XSL_formatting\" type=\"text/xsl\" href=\"feed.xsl\"?>\n");
			sb.append("<rss version=\"2.0\">\n");
			sb.append("<channel>\n");
			sb.append("<title>"+Conversor.HTMLEntityEncode(conteudo.getPagina().getNoTitulo())+"</title>\n");
			sb.append("<description>"+Conversor.HTMLEntityEncode(conteudo.getPagina().getDePagina())+"</description>\n");
			sb.append("<link>http://"+request.getServerName()+ porta + getServletContext().getContextPath()+"</link>\n");
			sb.append("<pubDate>23 May 2010 00:00:00 GMT</pubDate>\n");
			
			for(ItemConteudo item: lista){
				//fazer um html encode
				boolean linkProprio=false;//guarda se o item tem um link externo proprio
				retorno+="<item>\n";
				if(item.getNoTitulo()!=null){
					retorno+="<title>"+Conversor.HTMLEntityEncode(item.getNoTitulo().trim())+"</title>\n";
				}else{
					retorno+="<title>Sem Titulo</title>\n";
				}
				retorno+="<pubDate>" +item.getDtCriacao()+"</pubDate>\n";
				String desc = "";
				String link = "http://"+request.getServerName()+porta + getServletContext().getContextPath()+'/';
				for(ConteudoFormatado cf: item.getListConteudoFormatado()){
					int nuFormato = cf.getInformacaoTipoConteudo().getNuFormato();
					if(nuFormato==Gerenciador.TIPO_TEXTAREA || nuFormato == Gerenciador.TIPO_RTF){
						desc = cf.getDeConteudo();
					}
					if(nuFormato==Gerenciador.TIPO_LINK_EXTERNO || nuFormato==Gerenciador.TIPO_LINK_EXTERNO_NAO_VAZIO){
						if(cf.getDeConteudo()!=null){
							if(cf.getDeConteudo().startsWith("?nu_pagina=")){//link interno
								link += cf.getDeConteudo();
							}else{//link externo, deve comecar com http://
								link = cf.getDeConteudo();
							}
							linkProprio = true;
						}
					}
				}
				retorno+="<description>"+ Conversor.HTMLEntityEncode(desc) +"</description>\n";
				
				if(!linkProprio){//se o item nao tiver um link proprio, criamos um
					Pagina pagina = item.getConteudo().getPagina();
					Long nuPadraoApresentacao = pagina.getPadraoApresentacao().getNuPadraoApresentacao();
					if(pagina.getUri()==null){
						link+="item-titulo-"+nuPadraoApresentacao+"-" + item.getNuItemConteudo() + "-" + pagina.getNuPagina() +".htm";
					}else{
						link+="item-titulo-"+nuPadraoApresentacao+"-" + item.getNuItemConteudo() + "-" + pagina.getNuPagina() +".htm";
					}
				}
				retorno+="<link>"+ link.replace("&", "&amp;") +"</link>\n";
				retorno+="</item>\n";
			}
			sb.append(retorno);
			sb.append("</channel>\n");
			sb.append("</rss>");
			
			//faz a resposta
			response.getWriter().write(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
